(function() {
	var methods = {
		toate: function() {
				return jQuery(".produse .produs");
			},
		noi: function() {
				return jQuery.produse.toate().each(function(){return jQuery(this).filter(".nou")});
			},
		ultimul: function() {
				return jQuery.produse.toate().filter(":last");
			},
		ultimulNou: function() {
				return jQuery.produse.noi().filter(":last");
			},
		adauga: function(times, after) {
				var n = isNaN(times)?1:times;
				after = after?jQuery.produse.get(after):jQuery.produse.ultimul();
				var a = [];
				for (var i = n; i > 0; i--) {
					count = jQuery.produse.toate().size() + 1;
					a.push(
						jQuery.produse.ultimul()
							.clone()
								.goleste()
									.insertAfter(after)
										.schimbaId(count)
											.addClass("nou")
												.operatii()
					);
				}
				jQuery.produse.reguleaza();
				return a;
			},
		getNou: function(id) {
				return jQuery(".produse #cerere_produs" + id + ".nou");
			},
		getVechi: function(id) {
				return jQuery(".produse #cerere_produs" + id).not("[class *= ' nou']");
			},
		get: function(id) { //si nou si vechi
				return jQuery.produse.getNou(id).add(jQuery.produse.getVechi(id));
			},
		reguleaza: function(offset) {
				//daca exista offset atunci reguleaza doar de la offset in sus
				offset = isInt(offset) ? offset : 0;
				return jQuery.produse.noi().each(function(i){
					if (i+1 >= offset) return jQuery(this).schimbaId(i+1);
				});
			}
	};
	jQuery.produse = methods;
	
	jQuery.fn.adauga = function(times) {
		return jQuery.produse.adauga(times, jQuery(this).produsId());
	};
	jQuery.fn.produsId = function() {
		return jQuery(this).attr('id').replace(/cerere_produs/i, '');
	};
	jQuery.fn.goleste = function() {
		return this.each(function(){
			jQuery(this).find("input").val('').end()
				.find("operatii-produse").hide();
		});
	};
	jQuery.fn.stergeProdus = function() {
		if ($.produse.toate().size() == 1) { alert("Nu poti sterge unicul produs."); return false; }
		var id = jQuery(this).produsId();
		jQuery(this).remove();
		jQuery.produse.reguleaza(id); //doar pentru iduri mai mari sau egale cu id
		return  true;
	};
	jQuery.fn.schimbaId = function(id, options) { // se va folosi pentru randul de produs
		//defaulturi
		opt = jQuery.extend({
			h3: '%ID%',
			id: 'cerere_produs%ID%',
			fieldName: 'cerere[produse][noi][%ID%][%FIELD%]',
			fieldId: 'cerere_produsNou%ID%_%FIELD%',
			fields: ['nume', 'standard', 'cod', 'material', 'dimensiune', 'cantitate', 'tip_furnizor']
		}, options);
		return this.each(function(){
			var o = clone(opt); jQuery.each(o, function(i){o[i] = o[i].toString().replace(/%id%/i, id);});
			jQuery(this).attr("id", o.id).find("h3:first").text(o.h3);
			for (var i in opt.fields) jQuery(this).find("input, select").eq(i).attr("id", o.fieldId.toString().replace(/%FIELD%/i, opt.fields[i])).attr("name", o.fieldName.toString().replace(/%FIELD%/i, opt.fields[i]));
		});
	};
	jQuery.fn.operatii = function(options) {
		opt = jQuery.extend({
		}, options);
		return this.each(function(){
			var operatii = jQuery(".operatii-produs", jQuery(this));
			operatii.find(".adauga-produs").click(function(){
					jQuery(this).parents('.produs').adauga(1);
				}).end().find(".sterge-produs").click(function(){
					jQuery(this).parents(".produs").stergeProdus();
				}).end().find(".goleste-produs").click(function(){
					jQuery(this).parents(".produs").goleste();
			});
			if ($.produse.toate().size() == 1) operatii.find(".sterge-produs").hide();
				else operatii.find(".sterge-produs").show();
			jQuery(this).hover(function(){
				jQuery(".produse .operatii-produs").fadeOut("fast");
				operatii.fadeIn("fast");
			}, function(){
				operatii.fadeOut("fast");
			});
		});
	};
// jQuery.each(methods, function(i){
// jQuery.fn[i] = this;
// });
})();

jQuery().ready(function(){
	jQuery(".produs").operatii();
});